package cn.iocoder.yudao.module.system.dal.mysql.a_audio_and_video;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.system.controller.admin.a_audio_and_video.vo.AudioAndVideoPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.a_audio_and_video.AudioAndVideoDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

@Mapper
public interface AudioAndVideoMapper extends BaseMapperX<AudioAndVideoDO> {

    /**
     * 分页查询
     * @param pageReqVO 查询参数
     * @return 返回列表
     */
    default PageResult<AudioAndVideoDO> page(AudioAndVideoPageReqVO pageReqVO){
        LambdaQueryWrapperX<AudioAndVideoDO> wrapperX = new LambdaQueryWrapperX<AudioAndVideoDO>()
                .likeIfPresent(AudioAndVideoDO::getTitle, pageReqVO.getTitle())         // 模糊查询标题
                .likeIfPresent(AudioAndVideoDO::getIntroduction, pageReqVO.getIntroduction())  // 模糊查询简介
                .likeIfPresent(AudioAndVideoDO::getCaptions, pageReqVO.getCaptions())   // 模糊查询字幕
                .eqIfPresent(AudioAndVideoDO::getType, pageReqVO.getType())             // 精确查询类型
                .eqIfPresent(AudioAndVideoDO::getIsShare, pageReqVO.getIsShare())       // 精确查询是否为共享素材库
                .eqIfPresent(AudioAndVideoDO::getCategory, pageReqVO.getCategory());     // 精确查询分类
        if(pageReqVO.getOnlyMe()){
            wrapperX.eq(AudioAndVideoDO::getCreator, String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
        }
        wrapperX.orderByDesc(AudioAndVideoDO::getCreateTime);                          // 按创建时间降序排序
        return selectPage(pageReqVO,wrapperX);
    }

    // 修改剪辑后的音频地址
    @Update("update gj_audio_and_video set audio_cutter=#{audioCutter} where id=#{id}")
    int updateAudioCutter(@Param("id") Long id, @Param("audioCutter") String audioCutter);

    // 修改剪辑后的音频时长
    @Update("update gj_audio_and_video set duration=#{duration} where id=#{id}")
    int updateDuration(@Param("id") Long id, @Param("duration") Double duration);

    // 更新下载次数
    @Update("update gj_audio_and_video set audio_and_video_download_num=audio_and_video_download_num+1 where id=#{id}")
    void updateDownloadCount(String id);
}
